package com.imooc.SmartChargeStation.demo.netty.handlers;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;

/**
 * author: zpy
 * description: 超时处理(服务端) 处理器
 * date: 2025/8/22
 */

public class ImoocServerHeartBeatHandler extends ChannelInboundHandlerAdapter {
/*
    怎么理解？
    餐厅（NettyServe）只需要开门，不需要主动去找客户，因此只需要监听餐厅有哪些用户在就餐
    这是一个处理服务端连接超时（心跳检测）的处理器，主要作用是监控客户端连接的空闲状态并做出相应处理
 */
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
/*
    ChannelHandlerContext ctx是啥意思？
    Netty 的 “通道处理上下文”，包含当前通道的所有信息（如通道本身、管道等），是操作通道的核心对象。

    IdleStateEvent是怎么产生的？
    IdleStateHandler会定时检测通道读写空闲情况，并生成IdleStateEvent事件，传递给userEventTriggered方法。
    IdleStateHandler的作用是：监控当前连接的 “空闲状态”（即一段时间内没有读写操作）。我们在初始化ChannelPipeline（通道处理器链）时，会主动添加IdleStateHandler，并配置三个参数：
    IdleStateEvent是IdleStateHandler“生产” 的，通过 Netty 的事件传递机制 “送到” 了userEventTriggered方法中。
 */
        if(evt instanceof IdleStateEvent) {
            IdleStateEvent event = (IdleStateEvent) evt;

            switch (event.state()) {

                //读超时处理
                case READER_IDLE:
                    ctx.channel().close();
                    break;

                //写超时的处理
                case WRITER_IDLE:
                    break;

                //读或写超时的处理
                case ALL_IDLE:
                    break;

            }
        }
    }
}
